package com.fourforfo.fourmall.cart.vo;

import lombok.Data;
import lombok.ToString;

import java.math.BigDecimal;
import java.util.List;

/**
 * @program: fourmall
 * @description: 整个购物车的购物项信息集合,需要计算的属性，需要重新getter方法，保证每次获取属性进行计算，即充血模型
 * @author: fourforfo
 * @email: fourforfo@gmail.com
 * @create: 2022-08-23 14:26
 **/
@ToString
public class CartVO {

    List<CartItemVO> itemVOList;

    private Integer countNum ;//总的商品数量

    private Integer countType ;//商品类型数量，即有几种商品

    private BigDecimal totalAmount;//总个购物车的商品总价

    private BigDecimal reducePrice = new BigDecimal("0");//减免价格


    public List<CartItemVO> getItemVOList() {
        return itemVOList;
    }

    public void setItemVOList(List<CartItemVO> itemVOList) {
        this.itemVOList = itemVOList;
    }

    public Integer getCountNum() {
        if(this.itemVOList!=null&&this.itemVOList.size()>0) {
            return itemVOList.stream().mapToInt(CartItemVO::getCount).sum();
        }
        return 0;
    }

    public Integer getCountType() {
        //统计其中skuId不相同的商品数量
        if(this.itemVOList!=null&&this.itemVOList.size()>0) {
            return (int)itemVOList.stream().map(CartItemVO::getSkuId).distinct().count();
        }
        return 0;
    }

    //获取总价格
    public BigDecimal getTotalAmount() {
        if(this.itemVOList!=null&&this.itemVOList.size()>0) {
            BigDecimal decimal = itemVOList.stream().filter(CartItemVO::getCheck).map(CartItemVO::getTotalPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
            decimal = decimal.subtract(getReducePrice());
            return decimal;
        }
        return new BigDecimal("0");
    }

    public BigDecimal getReducePrice() {
        return reducePrice;
    }

    public void setReducePrice(BigDecimal reducePrice) {
        this.reducePrice = reducePrice;
    }
}
